iT邦幫忙

2025 iThome 鐵人賽

DAY 22
1
Software Development

ClickHouse 系列:從資料庫底層架構到軟體應用實踐系列 第 22

Day 22 | ClickHouse 系列:儲存政策(Storage Policies)與磁碟資源分層策略

  • 分享至 

  • xImage
  •  

當你的 ClickHouse 資料規模從 GB、TB 成長到 PB 時,如何妥善分配 SSD、HDD、甚至雲端冷儲存資源,變得至關重要。ClickHouse 透過 Storage Policies (儲存政策),提供了極為靈活的磁碟分層架構,不僅能優化查詢效能,也能大幅降低儲存成本。

Storage Policies 是什麼?

Storage Policies 是 ClickHouse 內部管理資料儲存位置與分層邏輯的配置機制。它將磁碟資源劃分為不同層級(Volumes),並根據資料大小、TTL、Merge 條件等動態將資料移動至不同層級磁碟。

你可以做到:

  1. 熱資料存在 SSD,冷資料自動移至 HDD 或雲端 S3。
  2. 根據 Data Part 大小動態調度存儲位置。
  3. 搭配 TTL 策略,實現資料生命週期全自動管理。

Storage Policies 結構

<storage_configuration>
    <disks>
        <disk_ssd>
            <path>/var/lib/clickhouse/ssd/</path>
        </disk_ssd>
        <disk_hdd>
            <path>/var/lib/clickhouse/hdd/</path>
        </disk_hdd>
        <disk_s3>
            <type>s3</type>
            <endpoint>https://s3.amazonaws.com/your-bucket/</endpoint>
            <access_key_id>YOUR_KEY</access_key_id>
            <secret_access_key>YOUR_SECRET</secret_access_key>
        </disk_s3>
    </disks>
    <policies>
        <tiered_policy>
            <volumes>
                <hot>
                    <disk>disk_ssd</disk>
                </hot>
                <cold>
                    <disk>disk_hdd</disk>
                    <max_data_part_size_bytes>5000000000</max_data_part_size_bytes>
                </cold>
                <archive>
                    <disk>disk_s3</disk>
                </archive>
            </volumes>
        </tiered_policy>
    </policies>
</storage_configuration>

磁碟分層(Volumes)設計原則

層級 磁碟類型 適用資料 說明
Hot SSD 近 7 天高頻查詢資料 保證讀取速度與低延遲
Cold HDD 歷史數據或低頻查詢資料 儲存成本較低,適合冷資料
Archive S3 歸檔資料、不常查詢但需長期保留 跨區域備份、儲存無上限、成本最低

配合 TTL 實現自動熱冷資料分層

CREATE TABLE user_logs
(
    EventDate DateTime,
    UserID UInt64,
    Action String
) ENGINE = MergeTree
ORDER BY (UserID, EventDate)
SETTINGS storage_policy = 'tiered_policy'
TTL EventDate + INTERVAL 7 DAY TO VOLUME 'cold',
    EventDate + INTERVAL 30 DAY TO VOLUME 'archive';

這樣設計後:

  • 近 7 天資料會在 SSD。
  • 7 天到 30 天資料移動到 HDD。
  • 超過 30 天資料會自動移到 S3 儲存。

觀察資料分佈情況

SELECT
    name AS table_name,
    disk_name,
    count() AS parts
FROM system.parts
WHERE active AND table = 'user_logs'
GROUP BY table_name, disk_name;

能夠即時掌握資料是儲存在 SSD、HDD,還是 S3。

Storage Policies 與 MergeTree 的互動

  • 新資料寫入 → Hot Volume(除非超過 Part Size 限制)。
  • 背景合併 (Merge) 時會根據 Part 大小、TTL 將資料移動至下層 Volume
  • 儲存層級的選擇與分配完全由 Storage Policies 決定,不需手動干預。

儲存政策最佳實踐

  1. 分層設計要「能自動運作」 → 不需手動移動資料。
  2. 選擇適合的磁碟路徑與掛載點 → SSD 用於熱資料、HDD 為冷資料、S3 作為歷史歸檔。
  3. 搭配 TTL 做時間序列資料管理 → 自動清理與降層儲存。
  4. 監控系統.parts 與.part_log → 定期檢查 Part 移動情況與執行效能。

進階:監控 Storage Policies 實際運作情況

ClickHouse 提供了 system.storage_policies 系統表,讓你能夠隨時檢查 Storage Policies 與 Volume 配置,並了解磁碟資源的優先順序與分層邏輯。

system.storage_policies 欄位解讀

欄位名稱 說明
policy_name 儲存政策名稱。
volume_name 所屬 Volume 名稱。
volume_priority Volume 優先順序,數字越小優先度越高 (0 最優先)。
disks 該 Volume 內包含的磁碟列表。
volume_type Volume 類型 (JBOD, SINGLE_DISK, UNKNOWN)。
max_data_part_size 該 Volume 可儲存的最大 Data Part 大小 (0 代表無上限)。
move_factor 當 Volume 剩餘空間不足 (Free Space Ratio 超過此值) 時,ClickHouse 會將資料移動到下一個 Volume。
prefer_not_to_merge 是否避免在該 Volume 進行 Merge(理論上不建議啟用)。
perform_ttl_move_on_insert 插入資料時若符合 TTL 規則是否立即執行移動。
load_balancing 當 Volume 中包含多顆磁碟時,資料寫入的負載平衡策略(ROUND_ROBIN 或 LEAST_USED)。

檢查儲存政策與 Volume 配置

SELECT
    policy_name,
    volume_name,
    volume_priority,
    disks,
    volume_type,
    max_data_part_size,
    move_factor,
    load_balancing
FROM system.storage_policies
WHERE policy_name = 'tiered_policy';

結語

ClickHouse 的 Storage Policies 不僅僅是磁碟資源管理工具,更是「大規模數據儲存成本優化策略」的核心武器。只要正確設計,就能讓你的 ClickHouse 叢集具備自動儲存分層、效能與成本兼顧的絕佳特性。


上一篇
Day 21 | ClickHouse 系列:TTL 資料清理與儲存成本優化
下一篇
Day 23 | ClickHouse 系列:表格設計與儲存優化細節
系列文
ClickHouse 系列:從資料庫底層架構到軟體應用實踐30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言